/*
 * @Description: 评论数据模型
 * @Author: Junhuang
 * @Date: 2022-02-21 23:01:08
 * @LastEditTime: 2022-05-22 17:14:30
 * @LastEditors: Junhuang
 * @Reference:
 */
'use strict';
// 引入
module.exports = app => {
  const { INTEGER, DATE, TEXT } = app.Sequelize;
  // 配置（重要：一定要配置详细，一定要！！！）
  const Comment = app.model.define('comment', {
    id: {
      type: INTEGER(20),
      primaryKey: true,
      autoIncrement: true,
    },
    content: {
      type: TEXT, allowNull: false, defaultValue: '', comment: '评论内容',
    },
    user_id: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: '用户id',
    },
    video_id: {
      type: INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: '作品id',
    },
    status: { type: INTEGER, allowNull: false, defaultValue: 0, comment: '状态' },
    created_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('created_time');
        return (new Date(val)).getTime();
      },
    },
    reply_id: {
      type: INTEGER, allowNull: false, defaultValue: 0, comment: '回复id',
    },
    // 用于将评论与回复评论排序到一起的虚拟字段
    // group_id: {
    //   type: VIRTUAL, comment: '分组id',
    //   get() {
    //     let gid;
    //     gid = this.getDataValue('reply_id');
    //     if (!gid) {
    //       gid = this.getDataValue('id');
    //     }
    //     return gid;
    //   },
    //   set() {
    //     throw new Error('不要尝试设置 `group_id` 的值!');
    //   },
    // },
    updated_time: {
      type: DATE,
      // 获取器，对获取的数据库中的字段进行处理，此处将数据库中的时间字段转换为timestamp
      get() {
        const val = this.getDataValue('updated_time');
        return (new Date(val)).getTime();
      },
    },
  }, {
    timestamps: true, // 是否自动写入时间戳
    tableName: 'comment', // 自定义数据表名称
  });

  // 关联关系
  Comment.associate = function() {
    // 关联作品
    Comment.belongsTo(app.model.Video, {
      foreignKey: 'video_id',
    });

    // 关联发布人
    Comment.belongsTo(app.model.User, {
      foreignKey: 'user_id',
      as: 'send_user',
    });

    // 关联回复
    Comment.hasMany(app.model.Comment, {
      foreignKey: 'reply_id',
    });

    // 关联被评论
    Comment.belongsTo(app.model.Comment, {
      foreignKey: 'reply_id',
      as: 'rcomment',
    });
  };

  return Comment;
};
